package com.yc;

import java.lang.annotation.*;

@MyAnno(100)
public class AnnoTest {

    @MyAnno(value = 200, name="xyz")
    int a;

    @MyAnno(200)
    public void demo(@MyAnno(value=300,
            items={"a","b","c"}) int b){
    }

    public static void main(String[] args) {
        // 注解保持性
        Class<AnnoTest> aClass = AnnoTest.class;
        MyAnno myAnno = aClass.getAnnotation(MyAnno.class);
        System.out.println("myAnno = " + myAnno);

        // 注解的继承性
        Class<SubAnnoTest> bClass = SubAnnoTest.class;
        myAnno = bClass.getAnnotation(MyAnno.class);
        System.out.println("myAnno = " + myAnno);
    }

}

@Target({ElementType.TYPE,
        ElementType.METHOD,
        ElementType.FIELD,
        ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@interface MyAnno{
    // 以接口方法的语法定义注解属性, 允许没有属性的注解
    String name() default "abc";
    int value();
    String[] items() default {};
}

class SubAnnoTest extends AnnoTest{

}